草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 如何向量化 pow 函数(带负数)?

我正在尝试矢量化(SSE/AVX)pow函数。在我发现的所有实现中,它只是使用log和exp进行矢量化:pow(x,y)=exp(y*log(x))它适用于正x,但不适用于负x,因为负数的对数是一个复数。是否有可能在保持处理负数x的能力的同时有效地矢量化pow? 最佳答案 这是一个通用的答案,没有利用您实际如何矢量化pow()的任何细节。您可以检查基vector的任何元素是否为负,并在其上分支以在快路径和慢路径之间进行选择。返回实部和虚部的两个vector,因此快速路径可以为虚部返回_mm_setzero_ps()。不需要虚部的调用

c++ - 在 C++ (Vulkan) 中处理 C 代码

我正在尝试使用基于Vulkan的C++编写渲染引擎。Vulkan是用C语言编写的,因此它有一些有趣的约定。我在Vulkan应用程序的教程/代码片段中看到的一个反复出现的模式是,大多数代码都在一个非常大的类中。(现在我的vulkan类也已经有大约2000行)。但是为了制作一个合适的渲染引擎,我需要将我的代码划分到一定程度。前面提到的一个有趣的地方是它有一个叫做逻辑设备的东西,它是对显卡的抽象引用。它无处不在,以下列方式创建和分配事物:使用创建信息创建结构创建代码将输出到的变量调用实际的vkCreateSomething或vkAllocateSomething函数,传入逻辑设备,创建信息和

c++ - 将 std::unique_ptr 传递给类时出错

我必须创建从抽象类继承的类的实例。我的代码非常简单。它应该基于抽象类创建对象类的实例。抽象类也是模板类。然后我需要将这个对象放入保存指向该对象的指针的存储类中。传递指针时出现错误:templates.cpp:Inmemberfunction‘voidstorage::setPTR(std::unique_ptr&)’:templates.cpp:39:28:error:useofdeletedfunction‘std::unique_ptr&std::unique_ptr::operator=(conststd::unique_ptr&)[with_Tp=child;_Dp=std::

c++ - 如何在 Pi 上使用 OpenGL ES 在绘制到屏幕之前旋转纹理

最近才知道树莓派的GPU只支持OpenGLES。我有一个任务要完成,问题是,每当我搜索OpenGLES时,我都会得到基于Android和IOS的结果。谢天谢地,我只有一个小问题。我偶然发现了simple2d库,它抽象了OpenGLES与pi上的视频核心IVGPU的接口(interface)。它是一个开源库,似乎不支持旋转纹理。这是我想要清除所有障碍的唯一功能。这是对DrawTextures的调用。我将非常感谢任何帮助我解决这个问题的人。staticvoidS2D_GLES_DrawTexture(intx,inty,intw,inth,GLfloatr,GLfloatg,GLfloat

c++/c 访问具有不同名称和大小的多个字符数组

我正在分析一个pcap文件,并在Wireshark中将剖析导出为c数组,我需要从相关字节中提取一些数据。但是我不知道如何访问所有这些数组。它们看起来像这样:/*Frame(73bytes)*/staticconstunsignedcharpkt1324[73]={0x80,0xe6,0x50,0x06,0xe7,0xae,0x48,0xfd,/*..P...H.*/0x8e,0xdf,0x2f,0x06,0x86,0xdd,0x60,0x00,/*../...`.*/0x00,0x00,0x00,0x13,0x11,0x30,0x20,0x01,/*.....0.*/0x06,0x60

c++ - 通过 unique_ptr 和自定义删除器使用自动扣除

我目前正在使用一个C库,该库定义了许多数据类型,所有这些类型都需要由用户管理它们的生命周期。有许多函数以这种方式定义:int*create(){returnnewint();}voiddestroy(int*i){deletei;}其中大部分在创建后不需要访问。他们只需要存在。因此,我尝试使用在我需要它们存在的范围内声明的unique_ptr来管理它们。这样的声明是这样的://NotethatI'mavoidingwritingthetype'snamemanually.autoa=std::unique_ptr,decltype(&destroy)>{create(),&destro

c++ - 为什么这个悬空的 std::weak_ptr 不会导致 SEGFAULT?

这个问题在这里已经有了答案:Whendoesinvokingamemberfunctiononanullinstanceresultinundefinedbehavior?(2个答案)关闭4年前。在下面的代码中,我在范围内创建了一个shared_ptr并将其分配给一个weak_ptr。为什么在运行代码时我没有得到SEGFAULT,因为wp应该在范围之外无效,对吧?namespace{structDummy{intx;voidfoo(){std::coutwp;{autosp=std::make_shared();wp=sp;}wp.lock()->foo();};

c++ - 当工件是库且标志影响 C 或 C++ header 时,功能标志/切换

关于featureflags/toggles的讨论很多。和whyyouwouldusethem但大多数关于实现它们的讨论都围绕(网络或客户端)应用程序展开。如果您的产品/工件是C或C++库,并且您的公共(public)header受标志影响,您将如何实现它们?“天真”的做法并没有真正奏效:///Doessomething/***Doessomethingreallycool#ifdefFEATURE_FOO*@paramfooParamdescribeparamforfoo#endif*/voiddoSomethingCool(#ifdefFEATURE_FOOintfooParam=

c++ - 当通过 FFI 从 Rust 调用时,您如何使用返回 shared_ptr<T> 的 C++ 函数?

C++shared_ptrcreate_foo();使用rustextern"C"{pubfncreate_foo()->???;}Bindgen将shared_ptr变成不透明的blob。我不能只使用原始指针,因为这样C++代码就不知道我有一个对Foo的引用,并且可能会调用它的解构函数。 最佳答案 std::shared_ptr是一个C++类和一个非平凡的类型,不能按原样从库中导出——您需要它在目标语言中的定义符合C++中的定义.要使用FFI,您需要为您的库函数提供一个简单的CABI(C++ABI不稳定,可能会在编译器版本之间发生

c++ - 在ubuntu上用不同版本的gcc编译会产生不同的结果

所以我有一个像这样的项目设置:myfile.cpp包括:fsl_clock.h其中myfile是一个C++文件,fsl_clock.h是来自NXP的纯C头文件,其中可以看到它的一个版本here我的文件看起来像:#include"fsl_clock.h"现在我的文件中确实有更多内容,但我清空了它,直到只剩下这些内容为止。以下是我尝试过的编译结果:用arm交叉编译器arm-none-eabi-g++这编译得很好。使用主机(x86Linux)g++--version7.3.0-16ubuntu3它工作正常使用主机(x86Linux)g++--version7.3.0-27ubuntu1~18